設計物件導向程式時,有哪些需要注意的重要原則呢?
在物件導向的設計中,有許多經典的設計原則。其中最出名的就是SOLID原則。
其中分別為
此為程式設計與系統規劃的通用原則。
單一職責原則 (Single Responsibility Principle,SRP)指出任何一段程式,例如:類別、介面或函數應該只負責單一職責。
這是對功能調整的原則。
開放封閉原則 (Open-Close Principle,OCP) 是指程式功能調整時,應該避免修改現有程式,而透過擴展程式來達到功能調整的目的。包含新增方法、類別、介面等方式都可以達到此目的。
此為繼承時的設計原則。
里氏替換原則 (iskov Substitution Principle,LSP) 的概念為,子類別應該可以完全替換父類別的任何使用位置。子類別需要保持與父類別的行為一致,只是針對細節做出更多補充。如果真的需要不同的功能,代表應該分出不同的類別或新增不同的方法,而不在此父類別的繼承進行調整。
這是介面的設計原則。
介面隔離原則 (Interface Segregation Principle,ISP) 是指若某些情況下介面的某些功能不需要被實作時,應將該介面拆分為多個子介面。以避免一個類別強制實作不需要的方法,並提升程式的內聚性。
舉個例子來說,假設有一個名為「DataManager」的介面,負責資料的查詢和修改。若有些情況下只需要實作查詢功能,那麼應該將「DataManager」介面拆分為「DataReader」和「DataModifier」兩個子介面。這樣,每個子類別可以根據具體需求獨立實作,提升彈性和可擴展性。
這是減少程式直接耦合的方式的原則。
依賴反轉原則 (Dependency inversion principle,DIP) 是指在開發高階功能時,避免在其中直接實例化具有不同實作內容的底層功能。實作高階功能時只需指定所需底層功能的介面,後續動態傳入此底層介面的具體實作。
在高階功能中,需要進行商品清單的新增和修改操作。但是這些操作的具體實作方式可能有多種選擇,例如將資料寫入傳統資料庫、NoSQL資料庫,或者使用快取等方式。在這種情況下,不應該在高階功能中直接指定商品清單操作的具體實作類別。相反的,高階功能僅需參考商品清單操作的介面,並通過在建立高階功能物件時,以動態方式指定商品清單操作的具體實作方式。